//
//  CZHomeTableViewController.swift
//  WeiBo
//
//  Created by apple on 16/6/23.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit
import AFNetworking

// cell 可重用标识符
private let statusCellId = "statusCellId"

class CZHomeTableViewController: CZVisitorTableViewController {
    
    // 定义保存微博数据的数组
    var statusArray:[CZStatus] = [CZStatus]()
    
    let refresh = CZRefresh()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        /*
         判断用户是否登录
            - 登录 
            - 未登录 设置访客视图信息
        */
        if  !isLogin {
            visitorView?.setupVisitorViewInfo(nil, title: nil)
            return
        }
        // 设置tableViewInfo
        setupTableViewInfo()

       // 请求微博首页数据
        loadStatusData(activityView.isAnimating())

    }
    
    // 设置tableView 相关属性
    func setupTableViewInfo(){
        // 获取class  
        tableView.registerClass(CZStautsCell.self, forCellReuseIdentifier: statusCellId)
        // 自动计算行高UITableViewAutomaticDimension
        tableView.rowHeight = UITableViewAutomaticDimension
        // 预估行高
        tableView.estimatedRowHeight = 200
//        设置tableView分割线
        tableView.separatorStyle = .None
//        设置footView
        tableView.tableFooterView = activityView
//        创建UIRefreshControl
//        添加事件
        refresh.addTarget(self, action: "refreshAction", forControlEvents: UIControlEvents.ValueChanged)
    
        tableView.addSubview(refresh)
    }
//    监听事件
    @objc private func refreshAction(){
        loadStatusData(activityView.isAnimating())
    }
//   加载控件
    private lazy var activityView:UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        view.color = ThemeColor
        return view
    }()
}
//  请求首页数据
extension CZHomeTableViewController {

    func loadStatusData(pullUp: Bool){
        
        var sinceId:Int64 = 0
        var maxId:Int64 = 0
//        上拉加载更多
        if pullUp{
            maxId = statusArray.last?.id ?? 0
            if maxId > 0{
                maxId -= 1
            }
        }else{
//            下拉刷新
            sinceId = statusArray.first?.id ?? 0
        }
        CZNetworktools.sharedTools.homeLoadStatusData(sinceId, maxId: maxId, success: { (response) -> () in
//            停止转动
            self.endRefershing()

            // 判断我们请求回来数据是否有值 而且是否是一个数组
            guard let res = response?["statuses"] as?[[String: AnyObject]] else {
                print("返回数据为nil 或者 类型不匹配")
                return
            }
            // 定义一个临时数组
            var tempArray:[CZStatus] = [CZStatus]()
            // 遍历数组 完成字典转模型
            for dic in res {
                // 初始化模型
                let status = CZStatus(dict: dic)
                // 保存模型
                tempArray.append(status)
            }
//           上拉加载更多
            if pullUp{
                self.statusArray = self.statusArray + tempArray
            }else{
//                下拉刷新
                self.statusArray = tempArray + self.statusArray
            }
//            刷新UI
            self.tableView.reloadData()
            
            }) { (error) -> () in
                print("失败:\(error)")
        }
    }
//    结束动画
    func endRefershing(){
        self.activityView.stopAnimating()
        self.refresh.endRefreshing()
    }
}

extension CZHomeTableViewController {
    func first(){
        let manager = AFHTTPSessionManager()
        
        manager.GET("", parameters: nil, progress: nil, success: { (_, response) -> Void in
            
            guard let res = response?["statuses"] as? [[String: AnyObject]]else{
                print("返回数据为nil 或者 类型不匹配")
                return
            }
            // 创建一个临时数组保存每次遍历数组 字典转名的数据
            var tempArray:[CZStatus] = [CZStatus]()
            // 遍历数组 完成字典转模型
            for dic in res {
                // 实例化模型
                let stauts = CZStatus(dict: dic)
                
                // 保存模型到数组中
                tempArray.append(stauts)
            }
            
            
            }) { (_, error) -> Void in
                print("失败:\(error)")
                
        }
    }
    
    func second() {
        // 请求url
        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
        // 请求参数
        let params = ["access_token": CZUserAccountTools.sharedTools.accessToken!]
        // 发送请求
        CZNetworktools.sharedTools.request(MethodType.GET, urlString: urlString, parameters: params, success: { (response) -> () in
            // 判断请求回来数据是否有值 而且是否是一个数组
            guard let res = response?["statuses"] as?[[String: AnyObject]] else {
                print("返回数据为nil 或者 类型不匹配")
                return
            }
            // 定义一个临时数组
            var tempArray:[CZStatus] = [CZStatus]()
            // 遍历数组 完成字典转模型
            for dic in res {
                // 初始化模型
                let status = CZStatus(dict: dic)
                // 保存模型
                tempArray.append(status)
            }
            
            }) { (error) -> () in
                print("失败:\(error)")
        }
    }
}

extension CZHomeTableViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusArray.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // 创建cell
        let cell = tableView.dequeueReusableCellWithIdentifier(statusCellId, forIndexPath: indexPath) as! CZStautsCell
        // 给cell赋值
        cell.status = statusArray[indexPath.row]
        return cell
    }
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath){
        if statusArray.count == indexPath.row + 1 && !activityView.isAnimating(){
            print(indexPath.row)
//            开启动画
            activityView.startAnimating()
//            请求数据
            loadStatusData(activityView.isAnimating())
        }
    }
}
